package com.spring.framework.model.xml.inject;

import org.springframework.beans.factory.support.MethodReplacer;

import java.lang.reflect.Method;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class ArbitraryMethodRe {

    /**
     * 时间格式化器
     */
    public static class TimeConverter {
        /**
         * 需要被替换的方法
         */
        public String convert(byte type) {
            DateTimeFormatter dateTimeFormater;
            if (type == 1) {
                dateTimeFormater = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
            } else {
                dateTimeFormater = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒");
            }
            LocalDateTime localDateTime = LocalDateTime.now();
            return dateTimeFormater.format(localDateTime);
        }
    }

    /**
     * 方法替换器
     */
    public static class ReplaceTimeConverter implements MethodReplacer {

        /**
         * 重新实现给定的方法，增加功能。还是走的cglib的逻辑
         *
         * @param obj    重新实现的方法的实例
         * @param method 需要重新实现的方法
         * @param args   方法的参数数组
         * @return 方法的返回值
         * @throws Throwable 异常
         */
        @Override
        public Object reimplement(Object obj, Method method, Object[] args) throws Throwable {
            byte type = (byte) args[0];
            //增加一种格式化逻辑
            DateTimeFormatter dateTimeFormater;
            switch (type) {
                case 1:
                    dateTimeFormater = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
                    break;
                case 2:
                    dateTimeFormater = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒");
                    break;
                default:
                    dateTimeFormater = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss SSS");
            }
            LocalDateTime localDateTime = LocalDateTime.now();
            return dateTimeFormater.format(localDateTime);
        }
    }
}
